package com.kexio.enterprise.observability.tracing.context;

import com.kexio.enterprise.observability.tracing.domain.SpanLog;
import com.kexio.enterprise.observability.tracing.enums.SpanStatus;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 追踪上下文
 * 
 * @author Kexio
 * @since 1.0.0
 */
public interface TraceContext {
    /**
     * 获取追踪ID
     */
    String getTraceId();
    
    /**
     * 获取SpanID
     */
    String getSpanId();
    
    /**
     * 获取父SpanID
     */
    String getParentSpanId();
    
    /**
     * 获取操作名称
     */
    String getOperationName();
    
    /**
     * 是否已采样
     */
    boolean isSampled();
    
    /**
     * 获取开始时间
     */
    LocalDateTime getStartTime();
    
    /**
     * 获取标签
     */
    Map<String, String> getTags();
    
    /**
     * 获取日志
     */
    List<SpanLog> getLogs();
    
    /**
     * 获取状态
     */
    SpanStatus getStatus();
    
    /**
     * 是否已完成
     */
    boolean isFinished();
}
